/*******************************************************************
 *   > File Name: printf.c
 *   > Author: fly
 *   > Mail: XXXXXXXX@icode.com
 *   > Create Time: 2020年07月08日 星期三 23时44分29秒
 ******************************************************************/

#include <stdio.h>
//#include <vsprintf.h>
#include <string.h>
#include <s5pv210-serial.h>

#define OUTBUFSIZE      1024
#define INBUFSIZE       1024

static char g_pcOutBuf[OUTBUFSIZE];
static char g_pcInBuf[INBUFSIZE];

extern void uart0_putc(char c);
extern char uart0_getc(void);

int printf(const char *fmt, ...)
{
    int i;
    int len;
    va_list args;

    va_start(args, fmt);
    len = vsprintf(g_pcOutBuf, fmt, args);
    va_end(args);
    for(i = 0; i< strlen(g_pcOutBuf); i++)
    {
        uart0_putc(g_pcOutBuf[i]);
    }
    return len;
}

int scanf(const char * fmt, ...)
{
    int i = 0;
    unsigned char c;
    va_list args;

    while(1)
    {
        c = uart0_getc();
        uart0_putc(c);
        if((c == 0x0d) || (c == 0x0a))
        {
            g_pcInBuf[i] = '0';
            break;
        }
        else
        {
            g_pcInBuf[i++] = c;
        }
    }

    va_start(args, fmt);
    i = vsscanf(g_pcInBuf, fmt, args);
    va_end(args);

    return i;
}

int puts(const char *s)
{
	int len = 0;
	while(*s)
	{
		uart0_putc(*s);
		s++; 
		len ++;
	}

	uart0_putc('\r');
	len ++;
	uart0_putc('\n');
	len ++;

	return len;
}

